﻿using System;
using System.Collections.Generic;
using Onshi.POS.Modelo.Entidades.Tipos;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Objetos;

namespace Onshi.POS.Modelo.Entidades
{
    public abstract class Persona<TRubro, TRegistro, TDomicilio, TTelefono, TDetalle> : EntidadAbstracta<TRubro, TRegistro, TDetalle>
        where TRubro : Rubro
        where TRegistro : Registro
        where TDomicilio : Domicilio
        where TTelefono : Telefono
        where TDetalle : Detalle
    {
        #region Constructores

        public Persona()
            : base()
        {
        }

        #endregion

        #region Atributos

        private List<TDomicilio> domicilios;
        private List<TTelefono> telefonos;
        private String sitioWeb;
        private String email;
        private String mensajeriaInstantanea;
        private String cuit;
        private Boolean tieneDomicilios;
        private Boolean tieneTelefonos;
        private TipoMensajeriaInstantanea tipoMensajeriaInstantanea;

        #endregion

        #region Propiedades

        public TipoMensajeriaInstantanea TipoMensajeriaInstantanea
        {
            get { return tipoMensajeriaInstantanea; }
            set { tipoMensajeriaInstantanea = value; }
        }

        public String MensajeriaInstantanea
        {
            get { return mensajeriaInstantanea; }
            set { mensajeriaInstantanea = value; }
        }

        public String CuitConFormato
        {
            get
            {
                if (Cuit.Trim() != String.Empty && Cuit.Length == 11)
                    return String.Format("{0}-{1}.{2}.{3}-{4}", Cuit.Substring(0, 2), Cuit.Substring(2, 2), Cuit.Substring(4, 3), Cuit.Substring(7, 3), Cuit.Substring(10));
                else
                    return String.Empty;
            }
        }

        public Boolean TieneDomicilios
        {
            get
            {
                if (Domicilios == null)
                    return tieneDomicilios;
                else
                {
                    if (Domicilios.Count != 0)
                        return true;
                    else
                        return false;
                }
            }
            set { tieneDomicilios = value; }
        }

        public Boolean TieneTelefonos
        {
            get
            {
                if (Telefonos == null)
                    return tieneTelefonos;
                else
                {
                    if (Telefonos.Count != 0)
                        return true;
                    else
                        return false;
                }
            }
            set { tieneTelefonos = value; }
        }

        public Boolean TieneInternet
        {
            get
            {
                if ((EnumTipoMensajeriaInstantanea)TipoMensajeriaInstantanea.Id == EnumTipoMensajeriaInstantanea.NO_UTILIZA
                    && MensajeriaInstantanea.Trim() == String.Empty
                    && Email.Trim() == String.Empty
                    && SitioWeb.Trim() == String.Empty)
                    return false;
                else
                    return true;
            }
        }

        public String Cuit
        {
            get { return cuit; }
            set { cuit = value; }
        }

        public String Email
        {
            get { return email; }
            set { email = value; }
        }

        public String SitioWeb
        {
            get { return sitioWeb; }
            set { sitioWeb = value; }
        }

        public List<TDomicilio> Domicilios
        {
            get { return domicilios; }
            set { domicilios = value; }
        }

        public List<TTelefono> Telefonos
        {
            get { return telefonos; }
            set { telefonos = value; }
        }

        #endregion
    }
}
